/**
 * Created by syl on 2016/8/15 0015.
 */
//帕普特播放器
function PPTMediaPlayer() {
    this.mediaPlayer = new MediaPlayer();
    //不使用Player的本地UI显示功能
    this.mediaPlayer.setNativeUIFlag(0);
    /**
     * 终端上某个媒体流或播放器实例的标识，由STB本地负责生成和维护，一旦针对某个新生成的MediaPlayer 对象绑定该 ID，
     * 就意味着该对象和STB 本地的某个媒体播放实例进行了绑定或关联。如果无法找到nativePlayerInstanceID对应的本
     * 地播放器实例，则操作失败，返回-1。
     * @param nativePlayerInstanceID
     */
    this.bindNativePlayerInstance = function (nativePlayerInstanceID) {
        this.mediaPlayer.bindNativePlayerInstance(nativePlayerInstanceID);
    };
    /**
     * 获 得 STB 本地播放器实例的instanceID
     */
    this.getNativePlayerInstanceID = function () {
        return this.mediaPlayer.getNativePlayerInstanceID();
    };
    /**
     * 初始化 MediaPlayer 的属性。当新创建的MediaPlayer 是为了和已有的 STB 本地某个媒体播放实例
     * （由先前其它页面中创建MediaPlayer 对象时创建的）进行绑定，无需调用该函数。
     *
     * @param nativePlayerinstanceID
     * @param playlistFlag
     * @param videoDisplayMode
     * @param height
     * @param width
     * @param left
     * @param top
     * @param muteFlag
     * @param useNativeUIFlag
     * @param subtitleFlag
     * @param videoAlpha
     * @param cycleFlag
     * @param randomFlag
     */
    this.initMediaPlayer = function (nativePlayerinstanceID, playlistFlag, videoDisplayMode, height, width, left, top,
                                     muteFlag, useNativeUIFlag, subtitleFlag, videoAlpha, cycleFlag, randomFlag) {
        this.mediaPlayer.initMediaPlayer(nativePlayerinstanceID, playlistFlag, videoDisplayMode, height, width, left, top,
            muteFlag, useNativeUIFlag, subtitleFlag, videoAlpha, cycleFlag, randomFlag);
    };

    this.releaseMediaPlayer = function () {
        this.mediaPlayer.releaseMediaPlayer();
    };

    /**
     * MediaPlayer 的播放模式。在初始化MediaPlayer 对象时必须进行该参数的初始设定。在播放过程中，此属性不能再被修改。
     * @param mode  (0：单媒体的播放模式(默认值) 1：播放列表的播放模式)
     */
    this.setSingleOrPlaylistMode = function (mode) {
        this.mediaPlayer.setSingleOrPlaylistMode(mode);
    };
    this.getSingleOrPlaylistMode = function () {
        return this.mediaPlayer.getSingleOrPlaylistMode();
    };
    /**
     * 每次调用该函数后，视频显示窗口并不会被立即重新刷新以反映更改后的显示效果
     * 只有等到显式调用refreshVideoDisplay()后才会刷新
     * @param left
     * @param top
     * @param width
     * @param height
     */
    this.setVideoDisplayArea = function (left, top, width, height) {
        this.mediaPlayer.setVideoDisplayArea(left, top, width, height);
    };
    this.getVideoDisplayLeft = function () {
        return this.mediaPlayer.getVideoDisplayLeft();
    };
    this.getVideoDisplayTop = function () {
        return this.mediaPlayer.getVideoDisplayTop();
    };
    this.getVideoDisplayWidth = function () {
        return this.mediaPlayer.getVideoDisplayWidth();
    };
    this.getVideoDisplayHeight = function () {
        return this.mediaPlayer.getVideoDisplayHeight();
    };
    /**
     * MediaPlayer 对象对应的视频窗口的显示模式。每次调用该函数后，视频显示窗口并不会被立即重新刷新以反映更改后的显示
     * 效果只有等到显式调用 refreshVideoDisplay()后才会刷新
     *
     * @param videoDisplayMode
     * 0：按 setVideoDisplayArea()中设定的Height,Width,Left,Top 属性所指定的位置和大小来显示视频
     * 1：全屏显示，按全屏高度和宽度显示(默认值)
     * 2：按宽度显示，指在不改变原有图像纵横比的情况下按全屏宽度显示
     * 3：按高度显示，指在不改变原有图像纵横比的情况下按全屏高度显示
     * 255：视频显示窗口将被关闭。它将在保持媒体流连接的前提下，隐藏视频窗口。如果流媒体播放没有被暂停，将继续播放音频。
     */
    this.setVideoDisplayMode = function (videoDisplayMode) {
        this.mediaPlayer.setVideoDisplayMode(videoDisplayMode);
    };

    this.getVideoDisplayMode = function () {
        return this.mediaPlayer.getVideoDisplayMode();
    };
    /**
     * 刷新播放器模式设置
     */
    this.refreshVideoDisplay = function () {
        this.refreshVideoDisplay();
    };
    /**
     *
     * @param muteFlag
     * 0：设置为有声(默认值)
     * 1：设置为静音
     */
    this.setMuteFlag = function (muteFlag) {
        this.mediaPlayer.setMuteFlag(muteFlag);
    };
    this.getMuteFlag = function () {
        return this.mediaPlayer.getMuteFlag();
    };
    /**
     * 表示该播放器实例在生命周期内都是否允许任何 TrickMode 操作（包括快进/快退/暂停）。
     * 这个属性与媒体本身的 TrickMode 属性是逻辑与的关系
     *
     * @param allowTrickmodeFlag
     * 0：允许 TrickMode 操做
     * 1：不允许 TrickMode 操作(默认值)
     */
    this.setAllowTrickmodeFlag = function (allowTrickmodeFlag) {
        this.mediaPlayer.setAllowTrickmodeFlag(allowTrickmodeFlag);
    };
    this.getAllowTrickmodeFlag = function () {
        return this.mediaPlayer.getAllowTrickmodeFlag();
    };
    /**
     * 设置是否循环播放节目
     * @param cycleFlag
     * 0：设置为循环播放
     * 1：设置为单次播放（默认值）
     */
    this.setCycleFlag = function (cycleFlag) {
        this.mediaPlayer.setCycleFlag(cycleFlag);
    };
    this.getCycleFlag = function () {
        this.mediaPlayer.getCycleFlag();
    };
    /**
     * 设置播放列表是否随机播放列表中的节目，只在播放列表模式下起作用
     * @param randomFlag
     * 0：设置为随机播放（默认值）
     * 1：设置为随机播放
     */
    this.setRandomFlag = function (randomFlag) {
        this.mediaPlayer.setRandomFlag(randomFlag);
    };
    this.getRandomFlag = function () {
        return this.mediaPlayer.getRandomFlag();
    };
    /**
     *设置单个播放的媒体。传入字符串 mediaStr 中的媒体对象的mediaURL。
     * z rtsp：//的单播地址，则要求连接单播地址进行播放；
     * z igmp：//的组播地址，要求连接组播地址进行播放；
     * z http：//的地址用于播放 mp3、WAV 等音频，如 http：//xxxxx/test.mp3、test.wav
     *
     * @param mediaStr 字符串，用 json对象封装媒体的属性。
     */
    this.setSingleMedia = function (mediaStr) {
        this.mediaPlayer.setSingleMedia(mediaStr);
    };
    /**
     * 要求终端访问指定的频道，并立即返回。对由本地设置为跳过的频道，也返回-1。
     * 频道地址为通过 CTCSetConfig 设置的频道列表中的地址：
     * 如频道地址为 igmp：//的组播地址，则加入组播频道，播放器开始播放组播频道，并处理相应的时移等功能；
     * 如频道地址为 rtsp：//的单播地址，则连接单播频道，播放器开始播放；
     * 如频道地址为 http：//的地址，则浏览器直接发起请求，访问该页面。
     * 【注】：在加入一个频道之前已经加入另外一个频道，需先调用 leaveChannel 方法离开前一个频道
     *
     * @param userChannelId 整数，表示用户频道号。
     * 返回值：0，表示成功；-1：表示频道号无效。
     */
    this.joinChannel = function (userChannelId) {
        return this.mediaPlayer.joinChannel(userChannelId);
    };
    /**
     * 要求终端离开指定的频道，并立即返回。
     * 如原频道地址为 igmp：//的组播地址，则立即离开组播频道，播放器停止播放组播频道，并断开相应的时移连接；
     * 如频道地址为 rtsp：//的单播地址，则断开单播频道，播放器停止播放；
     * 如频道地址为 http：//的地址，则浏览器不作操作。
     * 【注】：本方法只用于离开通过 joinChannel 方法加入的频道。
     *
     * 返回值：0，表示成功；-1：表示频道号无效。
     */
    this.leaveChannel = function () {
        return this.mediaPlayer.leaveChannel();
    };
    /**
     * 在播放列表末端，添加单个媒体。传入字符串。对于 index：如果为负数（如-1），表示默认添加在列表尾部（Append）；
     * 如指定的 index 值大于或等于 playlist 中已有媒体数目，则添加至playlist 尾部；其它情况为插入列表某个位置（Insert）；
     * index 会随着条目的移动/增加/删除而动态变化，由 STB 保证当前 playlist 中所有条目的 index 是从 0 按序加一递增的。
     * 对于entry_id：唯一标识 playlist 中每个媒体条目，一旦成功加入某个媒体后，该值不会变化。
     * @param index
     * @param mediaStr 字符串，用JSON 对象封装媒体的属性
     */
    this.addSingleMedia = function (index, mediaStr) {
        this.mediaPlayer.addSingleMedia(index, mediaStr);
    };
    /**
     *在播放列表末端，添加一批媒体。传入字符串
     * @param batchMediaStr 字符串，用JSON对象封装批量媒体的属性
     */
    this.addBatchMedia = function (batchMediaStr) {
        this.mediaPlayer.addBatchMedia(batchMediaStr);
    };
    /**
     * 清空播放列表
     */
    this.clearAllMedia = function () {
        this.mediaPlayer.clearAllMedia();
    };
    /**
     * 根据 index 将指定的媒体在播放列表中移动
     *
     * @param entryID 播放列表中某个媒体条目的唯一标识
     * @param toIndex 整数，需要移动到的索引值。0：表示播放列表的顶端。
     */
    this.moveMediaByIndex = function (entryID, toIndex) {
        this.mediaPlayer.moveMediaByIndex(entryID, toIndex);
    };
    /**
     *根据 index 将指定的媒体在播放列表中移动
     *
     * @param index 整数，指定的媒体在播放列表中的索引值。0：表示播放列表的顶端。
     * @param toIndex 整数，需要移动到的索引值。0：表示播放列表的顶端。
     */
    this.moveMediaByIndex1 = function (index, toIndex) {
        this.mediaPlayer.moveMediaByIndex1(index, toIndex);
    };
    /**
     *根据偏移量将指定的媒体在播放列表中移动
     *
     * @param entryID 播放列表中某个媒体条目的唯一标识
     * @param offset 偏移量，正整数表示从指定媒体向列表末端移动，负整数表示从指定媒体向列表起始端移动
     */
    this.moveMediaByOffset = function (entryID, offset) {
        this.mediaPlayer.moveMediaByOffset(entryID, offset);
    };
    /**
     * 根据偏移量将指定的媒体在播放列表中移动
     *
     * @param index 整数，指定的媒体在播放列表中的索引值。0：表示播放列表的顶端。
     * @param offset 偏移量，正整数表示从指定媒体向列表末端移动，负整数表示从指定媒体向列表起始端移动
     */
    this.moveMediaByOffset1 = function (index, offset) {
        this.mediaPlayer.moveMediaByOffset1(index, offset);
    };
    /**
     *将指定的媒体下移
     *
     * @param entryID 播放列表中某个媒体条目的唯一标识。
     */
    this.moveMediaToNext = function (entryID) {
        this.mediaPlayer.moveMediaToNext(entryID);
    };
    /**
     *
     * @param index 整数，指定的媒体在播放列表中的索引值。0：表示播放列表的顶端
     */
    this.moveMediaToNext1 = function (index) {
        this.mediaPlayer.moveMediaToNext1(index);
    };
    /**
     * 将指定的媒体上移
     *
     * @param entryID 播放列表中某个媒体条目的唯一标识。
     */
    this.moveMediaToPrevious = function (entryID) {
        this.mediaPlayer.moveMediaToPrevious(entryID);
    };
    /**
     * 将指定的媒体上移
     *
     * @param index 整数，指定的媒体在播放列表中的索引值。0：表示播放列表的顶端。
     */
    this.moveMediaToPrevious1 = function (index) {
        this.mediaPlayer.moveMediaToPrevious1(index);
    };
    /**
     * 将指定的媒体移到列表顶端
     *
     * @param entryID 播放列表中某个媒体条目的唯一标识.
     */
    this.moveMediaToFirst = function (entryID) {
        this.mediaPlayer.moveMediaToFirst(entryID);
    };
    /**
     * 将指定的媒体移到列表顶端
     *
     * @param index ，整数，指定的媒体在播放列表中的索引值。0：表示播放列表的顶端
     */
    this.moveMediaToFirst1 = function (index) {
        this.mediaPlayer.moveMediaToFirst1(index);
    };
    /**
     * 将指定的媒体移到列表末端
     *
     * @param entryID 播放列表中某个媒体条目的唯一标识.
     */
    this.moveMediaToLast = function (entryID) {
        this.mediaPlayer.moveMediaToLast(entryID);
    };
    /**
     * 将指定的媒体移到列表末端
     *
     * @param index 整数，指定的媒体在播放列表中的索引值。
     */
    this.moveMediaToLast1 = function (index) {
        this.mediaPlayer.moveMediaToLast1(index);
    };
    /**
     * 按媒体在播放列表中的索引选中为当前候选播放节目
     *
     * @param index 媒体在播放列表中的索引
     */
    this.selectMediaByIndex = function (index) {
        this.mediaPlayer.selectMediaByIndex(index);
    };
    /**
     * 按与当前媒体索引的偏移量选中媒体，作为当前候选播放节目
     *
     * @param offset 偏移量，正整数表示从当前媒体向列表末端跳转，负整数表示从当前媒体向列表起始端跳转
     */
    this.selectMediaByOffset = function (offset) {
        this.mediaPlayer.selectMediaByOffset(offset);
    };
    /**
     * 选取播放列表中的下一个媒体，作为当前候选播放节目
     */
    this.selectNext = function () {
        this.mediaPlayer.selectNext();
    };
    /**
     * 选取播放列表中的上一个媒体，作为当前候选播放节目
     */
    this.selectPrevious = function () {
        this.mediaPlayer.selectPrevious();
    };
    /**
     * 选取播放列表中的第一个媒体，作为当前候选播放节目
     */
    this.selectFirst = function () {
        this.mediaPlayer.selectFirst();
    };
    /**
     * 选取播放列表中的最后一个媒体，作为当前候选播放节目
     */
    this.selectLast = function () {
        this.mediaPlayer.selectLast();
    };
    /**
     * 按某个媒体条目的唯一标识选中为当前候选播放节目
     *
     * @param entryID ：播放列表中某个媒体条目的唯一标识
     */
    this.selectMediaByEntryID = function (entryID) {
        this.mediaPlayer.selectMediaByEntryID(entryID)
    };
    /**
     * 从媒体起始点开始播放。对 TVchannel，以实时 TV 的方式开始播放
     */
    this.playFromStart = function () {
        this.mediaPlayer.playFromStart();
    };
    /**
     *从当前媒体的某个时间点开始播放媒体（对 playlist 而言是指当前已经选中的媒体）。
     * 对实时播放的 TV channel该调用无效，但对处于时移状态的 TV channel有效。
     *
     * @param type 1：参见RFC2326中的Normal Play Time ；2：参见RFC2326中的Absolute Time(Clock Time)
     * @param timestamp 对 VoD而言是从媒体起始点开始计算的相对时间；对TVoD 等有时间基的媒体而言就是绝对时间。
     * @param speed 播放速度，可选参数
     */
    this.playByTime = function (type, timestamp, speed) {
        this.mediaPlayer.playByTime(type, timestamp, speed);
    };
    /**
     * 暂停正在播放的媒体
     */
    this.pause = function () {
        this.mediaPlayer.pause();
    };
    /**
     *  快进
     *
     * @param speed Float 类型，2 至32
     */
    this.fastForward = function (speed) {
        this.mediaPlayer.fastForward(speed);
    };
    /**
     * 快退
     *
     * @param speed Float 类型，2 至32
     */
    this.fastRewind = function (speed) {
        this.mediaPlayer.fastRewind(speed);
    };
    //只读的播放器属性-----------------------------------
    /*
     * 获取当前播放的媒体的标识。
     * MediaCode 是媒体的唯一标识（节目，频道等），使用系统定义的ContentID。
     * 当播放器在播放列表模式时，MediaCode 是动态改变的。
     */
    this.getMediaCode = function () {
        return this.mediaPlayer.getMediaCode();
    };
    /**
     * return 整数，以秒为单位
     */
    this.getMediaDuration = function () {
        return this.mediaPlayer.getMediaDuration();
    };
    /**
     * return 媒体播放到的当前时间点
     */
    this.getCurrentPlayTime = function () {
        return this.mediaPlayer.getCurrentPlayTime();
    };
    /**
     * 当 STB 播放器的 playbackmode 发生改变的时候以虚拟键及事件的方式通知 EPG
     *
     * 播放器的当前播放模式。返回值为JSON 字符串，其中至少包括“播放模式”和“模式相关参数”两类信息，
     * 播放模式分： NormalPlay,Pause,Trickmode；
     * 当模式为 Trickmode 时必须带2x/-2x,4x/-4x,8x/-8x,16x/-16x,32x/-32x 参数来表示快进/快退的速度参数，
     * 如：{PlayMode：“NormalPlay”,Speed：“1x”}
     */
    this.getPlaybackMode = function () {
        return this.mediaPlayer.getPlaybackMode();
    };
    /**
     * 返回终端当前播放的频道号，不能获得有效的频道号时，返回-1。
     */
    this.getChannelNum = function () {
        return this.mediaPlayer.getChannelNum();
    };
    /**
     * 获取当前的声道类型
     *
     * return 字符串： Left 、 Right 、 Stereo 、JointStereo
     */
    this.getCurrentAudioChannel = function () {
        return this.mediaPlayer.getCurrentAudioChannel();
    };
    /**
     * 获取当前的的音轨类型
     *
     * return 字符串：Chinese、English 等
     */
    this.getAudioTrack = function () {
        return this.mediaPlayer.getAudioTrack();
    };
    /**
     * 获取当前选择的字幕类型
     *
     * return 字符串：Chinese、English 等
     */
    this.getSubtitle = function () {
        return this.mediaPlayer.getSubtitle();
    };
    /**
     * 获取播放列表中的媒体数量
     */
    this.getMediaCount = function () {
        return this.mediaPlayer.getMediaCount();
    };
    /**
     * 获取当前播的媒体，在播放列表中的索引值
     *
     * return 整数，0：表示媒体列表的顶端
     */
    this.getCurrentIndex = function () {
        return this.mediaPlayer.getCurrentIndex();
    };
    /**
     * 获取当前播放的媒体的 EntryID
     *
     * return 字符串，媒体在播放列表中的唯一标识
     */
    this.getEntryID = function () {
        return this.mediaPlayer.getEntryID();
    };

    this.getPlaylist = function () {
        return this.mediaPlayer.getPlaylist();
    };
    //只读的播放器属性 end-----------------------------------
}